package edu.unmsm.ocaa.sisocaa.negocio.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;

import edu.unmsm.ocaa.sisocaa.integracion.dao.PregFichaDAO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.OpcPregFichaDTO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.PregFichaDTO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.PregFichaGuardarDTO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.PregFichaMostrarDTO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.PregFichaMsjDTO;
import edu.unmsm.ocaa.sisocaa.negocio.service.OpcPregFichaService;
import edu.unmsm.ocaa.sisocaa.negocio.service.PregFichaMsjService;
import edu.unmsm.ocaa.sisocaa.negocio.service.PregFichaService;

@Service
public class PregFichaServiceImpl implements PregFichaService {

	@Resource
	PregFichaDAO pregdao;
	@Resource
	OpcPregFichaService opcserv;
	@Resource
	PregFichaMsjService pfmserv;
	public void guardarPregxFicha(PregFichaDTO preg) throws DataAccessException {
		// TODO Auto-generated method stub
		pregdao.insertPregxFicha(preg);
		Integer idpregficha=pregdao.getMaxPreg().getId_pregficha();
		List<PregFichaMsjDTO> lsmsjs=new ArrayList<PregFichaMsjDTO>();
		if (preg.getListmsjs()!=null) {
			lsmsjs=preg.getListmsjs();	
		}	
		for (int i = 0; i < lsmsjs.size(); i++) {
			if (lsmsjs.get(i).getDelete().equals("black")) {
				lsmsjs.get(i).setId_ficha(preg.getId_ficha());
				lsmsjs.get(i).setId_pregficha(idpregficha);
				pfmserv.guardarPregFichaMsj(lsmsjs.get(i));
			}
		}
	}

	@Override
	public List<PregFichaDTO> listarPregxFicha(Integer idFicha)
			throws DataAccessException {
		// TODO Auto-generated method stub
		return pregdao.getPregsxFicha(idFicha);
	}

	@Override
	public PregFichaDTO obtenerMaxIdPreg() throws DataAccessException {
		// TODO Auto-generated method stub
		return pregdao.getMaxPreg();
	}

	@Override
	public List<PregFichaGuardarDTO> listarVwPregxFicha(Integer idFicha)
			throws DataAccessException {
		// TODO Auto-generated method stub
		List<PregFichaDTO> temps=pregdao.getPregsxFicha(idFicha);
		List<PregFichaGuardarDTO> temps2=new ArrayList<PregFichaGuardarDTO>();
		for (int i = 0; i < temps.size(); i++) {
			PregFichaDTO temp=temps.get(i);
			PregFichaGuardarDTO temp2=new PregFichaGuardarDTO();
			temp2.setId_ficha(temp.getId_ficha());
			temp2.setId_pregficha(temp.getId_pregficha());
			temp2.setDsc_pregficha(temp.getDsc_pregficha());
			temp2.setId_tiporesp(temp.getId_tiporesp());
			temp2.setDelete("black");
			if (temp2.getId_tiporesp()==1){
				temp2.setTiporesp("Se marca solo una opcion");
			} else{
				temp2.setTiporesp("Se marca mas de una opcion");
			}
			temp2.setOpciones(opcserv.listarOpcionesxPreg(temp2.getId_ficha(), 
					temp2.getId_pregficha()));
			List<PregFichaMsjDTO> listpfm=pfmserv.listarPregFichaMsjs(temp2.getId_ficha(), temp2.getId_pregficha());
			for (int j = 0; j < listpfm.size(); j++) {
				listpfm.get(j).setDelete("black");
			}
			temp2.setListmsjayudas(listpfm);
			temps2.add(temp2);
		}
		return temps2;
	}

	@Override
	public PregFichaGuardarDTO obtenerVwPregxFicha(Integer idFicha,
			Integer idPregficha) throws DataAccessException {
		// TODO Auto-generated method stub
		List<PregFichaDTO> temps=pregdao.getPregxFicha(idFicha, idPregficha);
		PregFichaGuardarDTO temp2=new PregFichaGuardarDTO();
		PregFichaDTO temp=new PregFichaDTO();
		if (temps.size()>0) {
			temp=temps.get(0);
			temp2.setDsc_pregficha(temp.getDsc_pregficha());
			temp2.setId_ficha(temp.getId_ficha());
			temp2.setId_pregficha(temp.getId_pregficha());
			temp2.setId_tiporesp(temp.getId_tiporesp());
			temp2.setOpciones(opcserv.listarOpcionesxPreg(idFicha, idPregficha));
		}
		return temp2;
	}

	@Override
	public void actualizarPregxFicha(PregFichaDTO preg)
			throws DataAccessException {
		// TODO Auto-generated method stub
		pregdao.updatePregxFicha(preg);
		List<PregFichaMsjDTO> lsmsjs=new ArrayList<PregFichaMsjDTO>();
		if (preg.getListmsjs()!=null) {
			lsmsjs=preg.getListmsjs();	
		}		
		for (int i = 0; i < lsmsjs.size(); i++) {
			if (lsmsjs.get(i).getDelete().equals("black")) {
				if (lsmsjs.get(i).getId_pregficha()<0) {
					lsmsjs.get(i).setId_ficha(preg.getId_ficha());
					lsmsjs.get(i).setId_pregficha(preg.getId_pregficha());
					pfmserv.guardarPregFichaMsj(lsmsjs.get(i));	
				}
				
			} else if(lsmsjs.get(i).getDelete().equals("red")){
				pfmserv.eliminarPregFichaMsj(lsmsjs.get(i));
			}
		}
	}

	@Override
	public void eliminarPregxFicha(PregFichaDTO preg)
			throws DataAccessException {
		// TODO Auto-generated method stub
		OpcPregFichaDTO opc=new OpcPregFichaDTO();
		PregFichaMsjDTO msj=new PregFichaMsjDTO();
		opc.setId_ficha(preg.getId_ficha());
		opc.setId_pregficha(preg.getId_pregficha());
		msj.setId_ficha(preg.getId_ficha());
		msj.setId_pregficha(preg.getId_pregficha());
		pfmserv.eliminarPregFichaMsjs(msj);
		opcserv.eliminarOpcionesxPreg(opc);
		pregdao.deletePregxFicha(preg);
	}

	@Override
	public List<PregFichaMostrarDTO> listarVwPregxFichaUsuFinal(Integer idFicha, Integer idUsuario)
			throws DataAccessException {
		// TODO Auto-generated method stub
		List<PregFichaDTO> temps=pregdao.getPregsxFicha(idFicha);
		List<PregFichaMostrarDTO> temps2=new ArrayList<PregFichaMostrarDTO>();
		for (int i = 0; i < temps.size(); i++) {
			PregFichaDTO temp=temps.get(i);
			PregFichaMostrarDTO temp2=new PregFichaMostrarDTO();
			temp2.setId_ficha(temp.getId_ficha());
			temp2.setId_pregficha(temp.getId_pregficha());
			temp2.setDsc_pregficha(temp.getDsc_pregficha());
			temp2.setId_tiporesp(temp.getId_tiporesp());
			temp2.setId_usuario(idUsuario);
			if (temp2.getId_tiporesp()==1){
				temp2.setTiporesp("Se marca solo una opcion");
				temp2.setOneOption(new Boolean(true));
				temp2.setManyOption(new Boolean(false));
			} else{
				temp2.setTiporesp("Se marca mas de una opcion");
				temp2.setOneOption(new Boolean(false));
				temp2.setManyOption(new Boolean(true));
			}
			temp2.setOpciones(opcserv.listarOpcionesxPregSelectItem(temp2.getId_ficha(), 
					temp2.getId_pregficha()));
			temp2.setOpcs(opcserv.listarOpcionesxPreg(temp2.getId_ficha(), temp2.getId_pregficha()));
			temp2.setListpfm(pfmserv.listarPregFichaMsjs(temp2.getId_ficha(), temp.getId_pregficha()));
			temp2.setShowCom(new Boolean(false));
			temps2.add(temp2);
		}
		return temps2;	
	}

	@Override
	public void eliminarTodasPregxFicha(Integer id_ficha) {
		// TODO Auto-generated method stub
		List<PregFichaDTO> pregs=pregdao.getPregsxFicha(id_ficha);
		for (int i = 0; i < pregs.size(); i++) {
			eliminarPregxFicha(pregs.get(i));
		}
	}

}
